package br.com.sgmf.web.managedbean;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.sgmf.model.Endereco;
import br.com.sgmf.model.Estado;
import br.com.sgmf.model.Motorista;
import br.com.sgmf.service.MotoristaService;

@Controller
@Scope("request")
public class MotoristaBean {

    private static final String MOTORISTA_EDITADO_COM_SUCESSO = "Motorista editado com sucesso!";
    private static final String MOTORISTA_CADASTRADO_COM_SUCESSO = "Motorista cadastrado com sucesso!";
    private static final String MOTORISTA_EXCLUIDO_COM_SUCESSO = "Motorista excluído com sucesso!";

    private Motorista motorista;
    private Endereco endereco;
    private List<Motorista> motoristas;

    @Autowired
    private MotoristaService motoristaService;

    @PostConstruct
    public void init() {
        motorista = new Motorista();
        endereco = new Endereco();

        motoristas = motoristaService.findAll();
    }

    public String salvar() {
        FacesMessage message;

        motorista.setEndereco(endereco);

        if (motorista.getId() == null) {
            motoristaService.save(motorista);
            message = new FacesMessage(FacesMessage.SEVERITY_INFO, MOTORISTA_CADASTRADO_COM_SUCESSO, null);
        } else {
            motoristaService.update(motorista);
            message = new FacesMessage(FacesMessage.SEVERITY_INFO, MOTORISTA_EDITADO_COM_SUCESSO, null);
        }

        motorista = new Motorista();
        endereco = new Endereco();

        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, message);

        return null;
    }

    public String editar(Motorista motorista) {
        this.motorista = motorista;
        this.endereco = motorista.getEndereco();
        return null;
    }

    public String excluir(Motorista motorista) {
        motoristaService.delete(motorista);

        motorista = new Motorista();

        FacesContext context = FacesContext.getCurrentInstance();
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, MOTORISTA_EXCLUIDO_COM_SUCESSO, null);
        context.addMessage(null, message);

        return null;
    }

    public Estado[] getEstados() {
        return Estado.values();
    }

    public Motorista getMotorista() {
        return motorista;
    }

    public void setMotorista(Motorista motorista) {
        this.motorista = motorista;
    }

    public Endereco getEndereco() {
        return endereco;
    }

    public void setEndereco(Endereco endereco) {
        this.endereco = endereco;
    }

    public List<Motorista> getMotoristas() {
        return motoristas;
    }

    public void setMotoristas(List<Motorista> motoristas) {
        this.motoristas = motoristas;
    }

}
